package com.xcode.example.base;

import com.xcode.example.config.AppConfig;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.UUID;

/**
 * 统一操作controller，如文件上传、下载等
 * @author Administrator
 */
@Slf4j
public class BaseController {

    /**
     * 上传文件并返回文件的访问路径
     * @param file 文件内容
     * @return 文件的访问路径
     */
    protected String uploadFile(MultipartFile file) {
        //文件重命名
        String fileName = file.getOriginalFilename();
        if (fileName != null) {
            // 获取文件扩展名
            String ext = fileName.substring(fileName.lastIndexOf(".") + 1);
            fileName = UUID.randomUUID().toString() + "." + ext;
        }

        //文件上传至指定目录
        String outputDirectory = AppConfig.getUploadPath();
        return uploadFile(file, outputDirectory, fileName);

    }

    /**
     * 上传文件并返回文件的访问路径
     * @param file 文件内容
     * @param outputDirectory 指定保存路径
     * @param fileName 指定新的文件名称
     * @return 文件的访问路径
     */
    protected String uploadFile(MultipartFile file, String outputDirectory, String fileName) {
        if (file != null && file.getSize() > 0) {
            File outputDirectoryFile = new File(outputDirectory);
            if (!outputDirectoryFile.exists()) {
                //创建目录
                if (!outputDirectoryFile.mkdirs()) {
                    return null;
                }
            }
            File tempFile = new File(outputDirectory + fileName);
            try {
                //生成文件
                if (!tempFile.exists()) {
                    if (!tempFile.createNewFile()) {
                        return null;
                    }
                }

                file.transferTo(tempFile);
                return AppConfig.getResourcePath() + "/" + fileName;
            } catch (IOException e) {
                if (log.isDebugEnabled()) {
                    e.printStackTrace();
                }
                log.error("上传文件失败：{}", e.getMessage());
            }
        }
        return null;
    }

    /**
     * 上传文件并返回文件的访问路径
     * @param bytes 文件内容
     * @param outputDirectory 指定保存路径
     * @param fileName 指定新的文件名称
     * @return 文件的访问路径
     */
    protected String uploadFile(byte[] bytes, String outputDirectory, String fileName) {
        if (bytes != null && bytes.length > 0) {
            File outputDirectoryFile = new File(outputDirectory);
            if (!outputDirectoryFile.exists()) {
                //创建目录
                if (!outputDirectoryFile.mkdirs()) {
                    return null;
                }
            }
            File tempFile = new File(outputDirectory + fileName);
            OutputStream os = null;
            try {
                //生成文件
                if (!tempFile.exists()) {
                    if (!tempFile.createNewFile()) {
                        return null;
                    }
                }

                os = new FileOutputStream(tempFile);
                os.write(bytes, 0, bytes.length);
                os.flush();
                return AppConfig.getResourcePath() + "/" + fileName;
            } catch (IOException e) {
                if (log.isDebugEnabled()) {
                    e.printStackTrace();
                }
                log.error("生成文件失败：{}", e.getMessage());
            } finally {
                try {
                    if (os != null) {
                        os.close();
                    }
                } catch (IOException e) {
                    log.error(e.getMessage());
                }
            }
        }
        return null;
    }


}
